home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / c / 2b_VRastPort.lha / VRastPort_2.0 / Source / math64.a next >
Text File  |  1998-10-25  |  2KB  |  95 lines

  1. ;64-bit math functions for vrastport.lib
  2. ;$VER math64.a 1.1 (14.10.98)
  3.  
  4.         INCLUDE    "utility/utility_lib.i"
  5.         
  6.         XDEF    _add64
  7.         XDEF    _sub64
  8.         XDEF    _cmp64
  9.         XDEF    _mul64
  10.         XDEF    _abs64
  11.         XDEF    _tst64
  12.  
  13.         XREF    _UtilityBase
  14.  
  15.         SECTION    code_p
  16.  
  17. low        = 4
  18. high        = 0
  19.  
  20. _add64        LEA    8(a0),a0
  21.         LEA    8(a1),a1
  22.         MOVE.L    -(a0),d0
  23.         ADD.L    d0,-(a1)
  24.         ADDX.L    -(a0),-(a1)
  25.         BVS.S    overflow_a
  26.         CLR.L    d0
  27.         BRA.S    no_ovr_a
  28. overflow_a    MOVEQ    #-1,d0
  29. no_ovr_a    RTS
  30.  
  31. ;-----------------------------------------------------------------------------
  32.  
  33. _sub64        LEA    8(a0),a0
  34.         LEA    8(a1),a1
  35.         MOVE.L    -(a0),d0
  36.         SUB.L    d0,-(a1)
  37.         SUBX.L    -(a0),-(a1)
  38.         BVS.S    overflow_s
  39.         CLR.L    d0
  40.         BRA.S    no_ovr_s
  41. overflow_s    MOVEQ    #-1,d0
  42. no_ovr_s    RTS
  43.  
  44. ;-----------------------------------------------------------------------------
  45.  
  46. _cmp64        MOVE.L    high(a0),d0
  47.         CMP.L    high(a1),d0
  48.         BEQ.S    compare_low
  49.         BGT.S    greater
  50. lower        MOVEQ    #-1,d0
  51.         RTS
  52. greater        MOVEQ    #1,d0
  53.         RTS
  54. compare_low    MOVE.L    low(a0),d0
  55.         CMP.L    low(a1),d0
  56.         BGT.S    greater
  57.         BLT.S    lower
  58.         CLR.L    d0
  59.         RTS
  60.         
  61. ;-----------------------------------------------------------------------------
  62.  
  63. _mul64        MOVEA.L    _UtilityBase,a1
  64.         JSR    _LVOSMult64(a1)
  65.         MOVE.L    d1,(a0)+
  66.         MOVE.L    d0,(a0)
  67.         RTS
  68.  
  69. ;-----------------------------------------------------------------------------
  70.  
  71. _abs64        TST.L    (a0)
  72.         BPL.S    no_neg
  73.         NEG.L    4(a0)
  74.         NEGX.L    (a0)
  75. no_neg        RTS
  76.  
  77. ;-----------------------------------------------------------------------------
  78.  
  79. _tst64        TST.L    (a0)
  80.         BEQ.S    test_low
  81.         BMI.S    negative
  82. positive    MOVEQ    #1,d0
  83.         RTS
  84. negative    MOVEQ    #-1,d0
  85.         RTS
  86. test_low    TST.L    4(a0)
  87.         BMI.S    negative
  88.         BNE.S    positive
  89.         CLR.L    d0
  90.         RTS
  91.  
  92. ;-----------------------------------------------------------------------------
  93.  
  94.         END
  95.